format short e 
echo on
format short e 
echo on
clear e vetn
% estremi dell'intervallo
a = -1; b = 1;
pause
n = 1;
% costruiamo il polinomio di interpolazione di grado n 
% su nodi equidistanti per la funzione e^x
for i=1:5   
    n=2*n
    vetn(i) = n;
pause
% nodi di interpolazione
xnodi = linspace(a,b,n+1)';
fnodi = exp(xnodi);
pause
% grafico dei nodi
hold off
plot(xnodi,fnodi,'*')
pause
xx = linspace(a,b,500);
yy = exp(xx);
pause
% grafico della funzione
hold on
plot(xx,yy,'b-')
pause
p = polyfit(xnodi,fnodi,n);
yp = polyval(p,xx);
pause
% grafico del polinomio interpolante
plot(xx,yp,'r-')
pause
%% errore  su 500 punti
e(i) = max(abs(yy-yp));
disp(e(i))
hold off
end
semilogy(vetn,e)



format short e 
echo on
format short e 
echo on
clear e vetn
% estremi dell'intervallo
a = -1; b = 1;
pause
n = 1;
% costruiamo il polinomio di interpolazione di Lagrange grado n 
% su nodi equidistanti per la funzione e^x
for i=1:5   
    n=2*n
    vetn(i) = n;
pause
% nodi di interpolazione
xnodi = linspace(a,b,n+1)';
fnodi = exp(xnodi);
pause
% grafico dei nodi
hold off
plot(xnodi,fnodi,'*')
pause
xx = linspace(a,b,500);
yy = exp(xx);
pause
% grafico della funzione
hold on
plot(xx,yy,'b-')
pause
yp = int_lag(xnodi,fnodi,xx);
pause
% grafico del polinomio interpolante
plot(xx,yp,'r-')
pause
%% errore  su 500 punti
e(i) = max(abs(yy(:)-yp(:)));
disp(e(i))
hold off
end
semilogy(vetn,e)

%% cambiamo funzione usiamo la funzione di Runge 
pause
a = -5; b = 5
n = 1;
% costruiamo il polinomio di interpolazione di grado n 
% su nodi equidistanti per la funzione 1 / (1+25x^2)
for i=1:5   
    n=2*n
    vetn(i) = n;
pause
% nodi di interpolazione
xnodi = linspace(a,b,n+1)';
fnodi = runge(xnodi);
pause
% grafico dei nodi
hold off
plot(xnodi,fnodi,'*')
pause
xx = linspace(a,b,500);
yy = runge(xx);
pause
% grafico della funzione
hold on
plot(xx,yy,'b-')
pause
p = polyfit(xnodi,fnodi,n);
yp = polyval(p,xx);
pause
% grafico del polinomio interpolante
plot(xx,yp,'r-')
pause
%% errore  su 500 punti
e(i) = max(abs(yy-yp));
disp(e(i))
hold off
end
semilogy(vetn,e)



%% cambiamo funzione usiamo la funzione di Runge 
pause
a = -5; b = 5
n = 1;
% costruiamo il polinomio di interpolazione di grado n 
% su nodi Chebyshev per la funzione 1 / (1+25x^2)
for i=1:6
    n=2*n
    vetn(i) = n;
pause
% nodi di interpolazione di Chebyshev
xnodi = (a+b)/2 + (b-a)/2*cos( (2*[0:n]'+1)*pi/(2*(n+1)) );
fnodi = runge(xnodi);
pause
% grafico dei nodi
hold off
plot(xnodi,fnodi,'*')
pause
xx = linspace(a,b,500);
yy = runge(xx);
pause
% grafico della funzione
hold on
plot(xx,yy,'b-')
pause
p = polyfit(xnodi,fnodi,n);
yp = polyval(p,xx);
pause
% grafico del polinomio interpolante
plot(xx,yp,'r-')
pause
%% errore  su 500 punti
e(i) = max(abs(yy-yp));
disp(e(i))
hold off
end
semilogy(vetn,e)


%% cambiamo funzione usiamo la funzione di Runge 
pause
a = -5; b = 5
n = 1;
% costruiamo il polinomio di interpolazione di grado n 
% su nodi Chebyshev per la funzione 1 / (1+25x^2)
for i=1:6  
    n=2*n
    vetn(i) = n;
pause
% nodi di interpolazione di Chebyshev
xnodi = (a+b)/2 + (b-a)/2*cos( (2*[0:n]'+1)*pi/(2*(n+1)) );
fnodi = runge(xnodi);
pause
% grafico dei nodi
hold off
plot(xnodi,fnodi,'*')
pause
xx = linspace(a,b,500);
yy = runge(xx);
pause
% grafico della funzione
hold on
plot(xx,yy,'b-')
pause
yp = int_lag(xnodi,fnodi,xx);

pause
% grafico del polinomio interpolante
plot(xx,yp,'r-')
pause
%% errore  su 500 punti
e(i) = max(abs(yy(:)-yp(:)));
disp(e(i))
hold off
end
semilogy(vetn,e)


%% la funzione di Runge 
pause
a = -5; b = 5
n = 1;
% costruiamo la spline lineare di interpolazione di grado n 
% su nodi equidistanti per la funzione 1 / (1+25x^2)
for i=1:6  
    n=2*n
    vetn(i) = n;
pause
% nodi di interpolazione equidistanti
xnodi = linspace(a,b,n+1);
fnodi = runge(xnodi);
pause
% grafico dei nodi
hold off
plot(xnodi,fnodi,'*')
pause
xx = linspace(a,b,500);
yy = runge(xx);
pause
% grafico della funzione
hold on
plot(xx,yy,'b-')
pause
yp = interp1(xnodi,fnodi,xx);

pause
% grafico della spline lineare 
plot(xx,yp,'r-')
pause
%% errore  su 500 punti
e(i) = max(abs(yy(:)-yp(:)));
disp(e(i))
hold off
end
semilogy(vetn,e)


%% la funzione di Runge 
pause
a = -5; b = 5
n = 1;
% costruiamo la spline cubica di interpolazione di grado n 
% su nodi equidistanti per la funzione 1 / (1+25x^2)
for i=1:6  
    n=2*n
    vetn(i) = n;
pause
% nodi di interpolazione equidistanti
xnodi = linspace(a,b,n+1);
fnodi = runge(xnodi);
pause
% grafico dei nodi
hold off
plot(xnodi,fnodi,'*')
pause
xx = linspace(a,b,500);
yy = runge(xx);
pause
% grafico della funzione
hold on
plot(xx,yy,'b-')
pause
yp = spline(xnodi,fnodi,xx);

pause
% grafico della spline cubica 
plot(xx,yp,'r-')
pause
%% errore  su 500 punti
e(i) = max(abs(yy(:)-yp(:)));
disp(e(i))
hold off
end
semilogy(vetn,e)
